package com.zxl.file;

import java.io.File;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.file.*;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 此类专用于文件夹中文件的重命名
 * @author zxl
 * @version 1.0
 * @description TODO
 * @date 2024/12/22 0:50
 */
public class RenameFile {

    public static String folderPath = "D:\\zxl\\Downloads\\副省级";
    public static void main(String[] args) throws IOException {
        String newSuffix = ".jpg";
        String newDir = "E:\\文档\\公考\\行测真题答案\\国考\\2025副省级";
        renameByNIO(folderPath,newDir,newSuffix);
//        renameByFile(folderPath,newSuffix);
    }

    /**
     * 使用NIO进行文件批量重命名。当重命名时需要复制到其他位置时建议使用此方法
     * @param dirPath
     */
    public static void renameByNIO(String dirPath, String newDir, String newSuffix) throws IOException {
        Path path = Paths.get(dirPath);
        if (Files.notExists(path)){
            System.err.println("文件或文件夹不存在");
            return;
        }
        if (Files.isDirectory(path)){
            Stream<Path> streams = Files.list(path);
            List<Path> pathList = streams.collect(Collectors.toList());
            for (Path path1 : pathList) {
                Files.copy(path1, Paths.get(newDir, path1.getFileName() + newSuffix));
            }
            System.out.println("批量重命名完成");
            return;
        }
        //单文件
        Files.copy(path, Paths.get(newDir, path.getFileName() + newSuffix));
        System.out.println("重命名完成");
    }

    /**
     * 使用File进行文件批量重命名。当在当前文件夹重命名时建议使用此方法
     * @param dirPath
     */
    public static void renameByFile(String dirPath, String newSuffix){
        File file = new File(dirPath);

        if(!file.exists()){
            System.err.println("文件或文件夹不存在");
            return;
        }
        if (file.isFile()){
            file.renameTo(new File(dirPath + File.separator + file.getName() + newSuffix));
            System.out.println("重命名完成");
            return;
        }
        if (!file.isDirectory()){
            System.out.println("不是文件夹");
            return;
        }
        File[] files = file.listFiles();
        for (File f : files) {
            f.renameTo(new File(dirPath + File.separator + f.getName() + newSuffix));
        }
        System.out.println("批量重命名完成");
    }
}
